#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 40;
// 记忆化
int n,m;
int arr[maxn];
int suffix[maxn]; // 后缀和, 同样也是为了降低递归深度, 主要优化就在这
int ans=50; // 初始化为最大值

void dfs(int pos, int sum, int cnt){
	if(sum==0||sum==suffix[pos]){  // 买完了或者说把剩下的拿走正好
		ans=min(ans, cnt);
		return;
	}
	if(pos==n+1||sum>suffix[pos]||cnt>=ans||sum<0){
		return;
	}

	// 买整个
	dfs(pos+1, sum-arr[pos], cnt);	
	// 砍一半
	dfs(pos+1, sum-arr[pos]/2, cnt+1);
	// 不买
	dfs(pos+1, sum, cnt);
}

void solve(){
	cin>>n>>m;
	m<<=1; // 要求的重量也 *2
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		x<<=1; // 重量 *2 防止砍过后出现 小数
		arr[i]=x;
	}
	sort(arr+1, arr+1+n, greater<int>()); // 从大到小排序, 提高效率, 降低递归深度
	for(int i=n;i>=1;i--){
		suffix[i]=suffix[i+1]+arr[i];
	}
	dfs(1, m, 0);
	cout<<(ans>=50?-1:ans)<<'\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
